package com.fg.cloud.manager.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import com.fg.cloud.common.PageUtils;
import com.fg.cloud.manager.entry.BaseEntity;

/**
 * @author：
 * @date ： 2017年6月5日 下午1:54:29
 * @Desc ：基础service类:包括通用的增删改查和分页查询
 */
public interface BaseService {

	/**
	 * 分页查询
	 * 
	 * @param param
	 *            参数
	 * @return
	 */
	public <T extends BaseEntity> PageUtils<T> selectPage(Map<String, Object> param);

	/**
	 * 查询功能，返回list
	 * 
	 * @param param
	 *            查询参数
	 * @return
	 */
	public <T extends BaseEntity> List<T> select(Map<String, Object> param);

	/**
	 * 获取记录数
	 * 
	 * @param param
	 *            参数
	 * @return
	 */
	public long count(Map<String, Object> param);

	/**
	 * 删除操作
	 * 
	 * @param id
	 *            操作对象id
	 * @return
	 */
	public int delete(Long id);

	/**
	 * 插入记录
	 * 
	 * @param t
	 *            具体对象
	 * @return
	 */
	public <T extends BaseEntity> int insert(T t);

	/**
	 * 修改操作
	 * 
	 * @param t
	 *            处理对象
	 * @return
	 */
	public <T extends BaseEntity> int update(T t);

	/**
	 * 获取特定对象
	 * 
	 * @param id
	 * @return
	 */
	public <T extends BaseEntity> T find(long id);
	
	/**
	 * 保存文件
	 * @param pictureFile 文件
	 * @param strPath 文件前缀
	 * @return
	 * @throws IOException
	 */
	public String saveFile(MultipartFile pictureFile,String strPath) throws IOException;
	
	/**
	 * 删除文件
	 * @param webPath 文件网络地址
	 * @return
	 * @throws IOException
	 */
	public boolean deleteFile(String webPath) throws IOException;
	
	/**
	 * 删除符合指定字段key的数据
	 * @param key String
	 * @param values String[] 值
	 * @return boolean true:成功
	 */
	public boolean deletes(String key, String[] values);
	
	/**
	 * 动态新增
	 * @param BaseEntity
	 * @return boolean true：成功
	 */
	<T extends BaseEntity> boolean insertSelective(T t);
	
	/**
	 * 动态修改值
	 * @param BaseEntity
	 * @return boolean true：成功
	 */
	<T extends BaseEntity> boolean updateByPrimaryKeySelective(T t);
	
	
}
